A reusable iterable returns a fresh iterator each time [Symbol.iterator]() is called, resetting the state for each iteration.
[Symbol.iterator]()